package com.maven.trans.demos.service;


import com.maven.trans.demos.mapper.LogMapper;
import com.maven.trans.demos.model.LogInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;

@Service
public class LogService {
    @Autowired
    LogMapper logMapper;

/*    @Transactional(propagation = Propagation.REQUIRED)
    public Integer insert(LogInfo logInfo){
        int a=10/0;
        return logMapper.insert(logInfo);
    }*/

    //传播机制：REQUIRES_NEW 级别：要建一个公共的事务
    // 都成功：       事务 提交
    // 有一个不成功：  两事务之间互不影响
/*    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public Integer insert(LogInfo logInfo){
        int a=10/0;
        return logMapper.insert(logInfo);
    }*/


    //传播机制：NEVER 级别： 不能有事务，有事务就报错
/*    @Transactional(propagation = Propagation.NEVER)
    public Integer insert(LogInfo logInfo){
        int a=10/0;
        return logMapper.insert(logInfo);
    }*/

    //传播机制：NESTED 级别：与 默认情况 REQUIRED 一致
    // 都成功：       事务 提交
    // 有一个不成功：  事务回滚
    // 不同之处： NESTED 可以做到某个事务回滚
    @Transactional(propagation = Propagation.NESTED)
    public Integer insert(LogInfo logInfo){
        try{
            int a=10/0;
        }catch (Exception e){
            e.printStackTrace();
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
        }

        return logMapper.insert(logInfo);
    }
}
